הסבר על TLS, אופן פעולה, שימוש והתקנת ssl בשרת הביתי
SSL היא טכנולוגיה ישנה ופחות אקטואלית בימינו אשר ידוע בשמה המלא כ Secure Sockets Layer . בשנים האחרונות החליפה אותה ה- TLS: Tranport Layer Security שעליה נדבר היום. נבין את אופן הפעולה שלה, את דרכי ההצפנה, ונגרום לשרת שלנו לעבוד ב-https
SSL ו-TLS הם פרוטוקולי תקשורת לרשתות מחשבים המאפשרים תקשורת מאובטחת ומוצפנת בין שני יישומים מתקשרים, לרוב - דפדפנים.
למה חשובה ההצפנה
אין בית בישראל שבימינו לא ביצע אף קניה באינטרנט באמצעות כרטיס אשראי או מסר פרטים אישיים חסויים באתר כלשהו ולא היה רוצה שיגיעו לידיים הלא נכונות. מידע רגיש רב עובר כל יום בחוטי הנחושת האינטרנטיים, וקיימת סכנה מתמדת שמישהו פשוט יחתוך קבל כזה באמצע, יחבר אותו משני הצדדים למחשב ויקרא את כל המידע העובר בו.
בפועל גנבת מידע מתבצעת ביתר קלות מזה. באמצעות תוכנות מסוימות שמסוגלות לסרוק את רשת האינטרנט האלחוטית שיש לכם בבית ולהעתיק את כל המידע שעובר מהמחשב שלכם אל המודם (כמו שגוגל עשו) או בעזרת ווירוסים שיושבים לכם על כרטיס הרשת במחשב ושולחים העתק של כל בייט לשרת זדוני או אחת מעשרות דרכים אפשריות אחרות.
פתרון ברור לבעיות אלו הוא הצפנת המידע העובר ברשת. מידע מוצפן, שגם עם יגיע ליעד לא רצוי יהיה חסר כל תועלת ללא אפשרות פיענוח. אבל איך להצפין אותו?
הצפנה אסימטרית — מפתח פרטי, מפתח ציבורי
הצפנת מידע חייבת להתבצע על פי מפתח כלשהו באמצעותו יוכל הצד השני לפענח את מה שמוצפן. כדי שזה יקרה הדפדפן והשרת צריכים להסכים על מפתח כלשהו שבו ישתמשו, אבל הכל לא כל כך פשוט, בייחוד כשיושב מישהו באמצע ומאזין לתעבורה שלנו, הרי הוא יכול לשמוע את המפתח ולהשתמש בו גם.
כאן לתמונה נכנסת הצפנה מסג אחר — הצפנה אסימטרית.
הצפנה כזו מאפשרת להצפין מידע עם מפתח אחד ולפענח רק עם מפתח אחר.
ניתן להמחיש זאת באנלוגיה למנעול צירופים (מנעול עם קוד). בוב שולח לאליס תיבה פתוחה שעליה תלוי מנעול צירופים פתוח כאשר לסגירת המנעול אין צורך בידיעת הצירוף הסודי. אליס יכולה לשים בתיבה מכתב ולנעול אותה, כעת היא יכולה לשלוח את התיבה לבוב ללא חשש. כיוון שרק בוב מכיר את הצירוף הסודי, רק הוא מסוגל לפתוח את התיבה ולקרוא את המכתב. אפילו אליס עצמה אינה מסוגלת לפתוח את התיבה לאחר שננעלה.
מערכות הצפנת מפתח פומבי מבוססות ברובן על מספר מצומצם של בעיות מתמטיות הידועות כקשות לפתרון מבחינה חישובית כמו בעיית פירוק לגורמים. בעיות אלו מאפשרות יישום פונקציה חד כיוונית מיוחדת הנקראת פונקציה חד-כיוונית עם דלת סתרים או דלת צונחת (Trapdoor). שהיא פונקציה חד-סטרית הקלה לחישוב בכיוון אחד אך קשה ביותר לשחזור בכיוון ההפוך. אולם מכילה מידע נוסף בעזרתו חישוב הפונקציה ההפוכה הופך לקל. ללא המידע הנסתר יהיה קשה ביותר לחשב את הפונקציה ההפוכה אלא אם כן תמצא דרך יעילה לפתרון הבעיה המתמטית האמורה.
שרת ממציא לו מפתח פרטי כלשהו ומפעיל עליו את הפונקציה הזו. כעת יש לו את המפתח הפרטי שלו שעליו הפעיל את הפונקציה, מפתח ציבורי שהתקבל מהפונקציה והמידע הדרוש לו לחישובים.
המפתח הציבורי מגיע אל הדפדפן והדפדפן מחליט לו על מפתח-סיסמה כלשהי. את הסיסמה הזו הוא שם בקופסה, מצפין עם המפתח הציבורי של השרת ושולח לשרת. לקרוא אותו יוכל רק השרת וזה ישמש מאתה את הדפדפן והשרת להצפנת נתונים ביניהם. בתקווה שבאמת הם מדברים אחד עם השני ולא אם מישהו שהתחזה לשרת ועונה לדפדפן במקומו.
סרטיפיקטים נגד התחזות
אותו מישהו שיושב ומאזין לכל התעבורה שלנו יכול בקלות להתחזות לשרת, לשלוח לנו מפתח שהוא המציא והדפדפן יצפין את התעבורה עד המתחזה שלנו במקום עד השרת האמיתי. המתחזה מצידו ידבר עם השרת האמיתי, הדפדפן שלו יצפין את המידע וישלך לשרת האמיתי ולמתחזה יהיה כל המידע שלנו מפוענח ומוגש על צלחת מזהב.
סרטיפיקטים הם תעודות זהות ששולח השרת ביחד עם המפתח הציבורי שלו. בתעודת זהות זו כתוב מיהו השרת, המפתח הציבורי של השרת, מי הנפיק לו את תעודת הזהות, עוד כמה דברים ועוד נתון ממש חשוב.
ה-md5 hash של כל הנתותים בסרטיפיקט, החתום בחתימה דיגיטלית של גוף מוסמך. ה-hash הזה מאפשר לדפדפן לוודא שהסרטיפיקט לא שונה בדרך, והחתימה הדיגיטלית של גוף שלישי מאפשרת לאמת את המקוריות שלו.
את הסרטיפיקטים האלה יוצר גוף שלישי שהדפדפן סומך עליו. בכל דפדפן יש רשימה מובנת של הגופים שעליהם הוא סומך. למשל זו הרשימה של firefox. הדפדפן יכול לגשת אל הגוף השלישי הזה ולוודא מולו שהוא באמת הנפיק את הסרטיפיקט הזה עם ה-hash הזה ובכך למנוע רמאות או זיוף סרטיפיקטים.
חתימה עצמית
הגופים החותמים על הסרטיפיקטים גובים תשלום מסוים על השירות ולכן אתרים מסוימים נמנעים מלקנות סרטיפיקט וחותמים על סרטיפיקט בעצמם. לדומיינים מסוימים אין אפשרות לקנות סרטיפיקט בכלל, כמו localhost ולצורך בדיקות יהיה עלינו לחתום לעצמינו על סרטיפיקת.
על סרטיפיקטים שלא חתומים על ידי אחד הגופים המורשים - הדפדפן לא יכול לסמוך ולכן לא פעם נתקלתם בתמונה הבאה:
הדפדפן מידע אותכם שלא יכול לאמת את הסרטיפיקט ולהבטיח הגנה על הנתונים שלכם.
יצירת סרטיפיקט לעצמנו
כדי ליצור לעצמינו סרטיפיקט יהיה עלינו להוריד את openssl toolkit (Win32 OpenSSL) — כלי שייצור עבורינו את המפתח הפומבי של השרת שלנו וסרטיפיקט.
יצירת מפתח ציבורי
השלב הראשון הוא יצירת המפתח הציבורי שלנו. המפתח הוא מפתח RSA של 1024 ביט, שמוצפן באלגוריתם Triple-Des ושמור בפורמט PEM, כדי שיהיה ניתן לקריאה כקובץ טקסט ASCII רגיל.
במהלך התקנת openssl toolkit שהורדנו ההתקנה תשאל הותנו לאן להעתיק קבצי ספריה מסוימים ותיתן לנו שני אפשרויות בחירה. הראשונה היא תיקיה windows והתיקיה השניה היא תיקית /bin. האפשרות השניה עדיפה.
לאחר ההתקנה ניפתח את cmd ונגיע לתיקיה שאליה התקננו את openssl.
אם התקנתם לפי ברירת מחדל - התיקיה היא C:\OpenSSL-Win32\bin
cd C:\OpenSSL-Win32\bin
בתיקיה הזו נפעיל את הפקודה הבאה:
openssl.exe genrsa -des3 -out server.key 1024
במהלך הפעולה הוא יבקש מכם להקליד סיסמה כלשהי פעמיים.
אין לה שום משמעוט כרגע. תקלידו 123 פעמיים ותזכרו מה הקלדתם.
Generating RSA private key, 1024 bit long modulus
.........................................................++++++
........++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
.........................................................++++++
........++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
לאחר הסיום יווצר בתיקיה זו הקובץ server.key . הוא מכיל את המפתח הפומבי.
אפשר לפתוח את הקובץ עם עורך טקסט כלשהו ולהציץ לבפנים.
יצירת סרטיפיקט
השלב הבא הוא יצירת סרטיפיקט המזהה את הדומיין והבעלים שלו. במהלך יצירת הסרטיפיקט תישאלו כמה שאלות. אין צורך לתת פרטים נכונים, הרי גם כך אף אחד לא יראה את הסרטיפיקט הזה חוץ מאיתנו.
openssl.exe req -new -key server.key -out server.csr
תחילה תשאלו מה הייתה הסיסמה של קובץ המפתח הפומבי- שהיא 123.
לאחר מכן יבואו שאלות על זהותכם. שימו לב לכתוב את שם הדומיין שלכם בשדה common name.
במקרה של שרת ביתי - localhost. את שני השדות האחרונים אין צורך למלא.
C:\OpenSSL-Win32\bin>openssl.exe req -new -key server.key -out server.csr
Enter pass phrase for server.key:
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IL
State or Province Name (full name) [Some-State]:Tel-Aviv
Locality Name (eg, city) []:Tel-Aviv
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PHPGUIDE
Organizational Unit Name (eg, section) []:PHPGUIDE web site
Common Name (eg, YOUR name) []:localhost
Email Address []:Alex@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Enter pass phrase for server.key:
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IL
State or Province Name (full name) [Some-State]:Tel-Aviv
Locality Name (eg, city) []:Tel-Aviv
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PHPGUIDE
Organizational Unit Name (eg, section) []:PHPGUIDE web site
Common Name (eg, YOUR name) []:localhost
Email Address []:Alex@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
הסרטיפיקט נוצר תחת השם server.csr באותה התיקיה ועדיין לא חתום על ידי אף אחד.
מחיקת סיסמה מקובץ המפתח הפומבי
כשניתן לשרת שלנו להשתמש במפתח הפומבי שיצרנו נצטרך להקליד את הסיסמה אל הקובץ, כדי שיוכל לקרוא אותו ולהשתמש בו. ונצטרך לעשות את זה כל פעם שהשרת נדלק מחדש. ל-mod_ssl יש אופציה לגרום לתוכנה חיצונית להקליד את הסיסמה באופן אוטומטי. במחשב הביתי אין לנו בזה צורך וניתן פשוט להוריד את הסיסמה מהקובץ כך שהשרת יוכל לקרוא אותו באופן חופשי.
כדי להוריד את ההצפנה מהקובץ כמובן שהוא יבקש את הסיסמה שלנו, שהיא 123.
copy server.key server.key.org
openssl.exe rsa -in server.key.org -out server.key
openssl.exe rsa -in server.key.org -out server.key
חתימה על הסרטיפיקט
עד עכשיו הסרטיפיקט שלנו נשאר לא חתום. הגיע הזמן לתקן את המצב.
אם תרצו שגוף אחר מוסמך יחתום לכם על הסרטיפיקט — תצטרכו לשלוח לו את קובץ ה-csr. אנחנו נחתום עליו לבד עם הפקודה:
openssl.exe x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
סוג הסרטיפיקט הוא x509. הסוג שבו משתמשים באינטרנט.
תוקף הסרטיפיקט 3650 ימים = 10 שנים.
זהו. אפשר להתבונן בקובץ הירוק ויפה server.crt בתיקיה .
הגדרות שרת
נעתיק את הקבצים server.key ו-server.crt לתיקיה כלשהי בשרת.
ב-wamp זו תהיה תיקית C:\wamp\bin\apache
בשרת שהותקן לפי המדריך זו יכולה להיות C:/www/server/apache
ניגש אל קובץ הקונפיגורציה של השרת
C:/www/server/apache/conf/httpd.conf או
C:\wamp\bin\apache\Apache2.2.17\conf\httpd.conf
שימוש במפתח הפומבי והסרטיפיקט
נמצא את השרותו הבאות (כל אחת בנפרד)
#Include conf/extra/httpd-ssl.conf
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule ssl_module modules/mod_ssl.so
ונוריד בתחילתם את הסולמיות. קובץ הקונפיגורציה הנוסף מכיל הגדרות אך ורק ל-ssl שנשנה מעט.
פתחו את הקובץ extra/httpd-ssl.conf
1. מצאו את השורה SSLCertificateFile ובערך שלה רשמו
SSLCertificateFile "C:/www/server/apache/server.crt"
2. מצאו את השורה SSLCertificateKeyFile וכתבו בערך שלה
SSLCertificateKeyFile "C:/www/server/apache/server.key"
התוצר יראה כמו בתמונה הזאת.
שימו לב שהתיקיה הרשומה היא התיקיה שאליה העתקתם את הקבצים server.crt ו-server.key
התקנת mod_ssl
קיימות שני גרסאות apache. אחת עם mod_ssl ואחת בלי.
השרת שבא עם wamp כולל אותה.
אם אין לכם בתיקיה modules של השרת קובץ עם השם mod_ssl.so תצטרכו להתקין מחדש רק את apache עם mod_ssl . כל התהליך עשוי לקחת בדיוק דקה אחת. רק תעשו העתק של התיקיה conf ושל שני קבצי server.key ו-server.crt ליתר בטחון. תחילה תצטרכו למחוק את ההתקנה של השרת הישן וזכרו להתקין את השרת בדיוק לאותו מקום בו היה C:\www\server\apache
נפעיל מחדש את apache
מי שלא ב-wamp עושה את זה באמצעות
start -> run -> services.msc -> apache -> restart
נגלוש ל https://localhost , נאשר לדפדפן את החתימה שלנו וזהו זה, התעבורה מוצפנת, It works!
דבר קטן אחד נוסף
כנראה שציפיתם לראות את האתר שלכם ולא את הכיתוב It Works. בגלל שהשרת מפריד כמעט לחלוטין בין תקשורת מוצפנת לתקשורת לא מוצפנת, מאזין על פורטים שונים ומשתמש בכמעט שני קבצי הגדרות נפרדים — הוא גם מפריד את תיקיות הקבצים של האתר.
כל שעלינו לעשות, הוא להעתיק את הערך של DocumetRoot מ httpd.conf אל httpd-ssl.conf
כדי לומר לו שבשני המקרים יפנה לאותה תיקית קבצים, כלומר
# General setup for the virtual host
DocumentRoot "C:/www/localhost"
DocumentRoot "C:/www/localhost"
ולאחר מכן להפעיל מחדש את השרת.
הסתבכתם או שנשארו שאלות? פנו לפורום לקבלת עזרה.
תגובות לכתבה:
איך מפעילים את זה אל אחסון פרטי?
על איחסון וירטואלי אי אפשר להפעיל ssl כיוון ש-ssl דורשת כתובת ip ייחודית ועזרה מסוימת מחברת האיחסון.
לאחר קניית סרטיפיקט למשל מ godady
https://www.godaddy.com/ssl/ssl-certificates.aspx
פנה לחברת האיחסון שלך לקבלת עזרה בחיבור הסרטיפיקט
רק אל תשכח לוודה איתם לפני את אפשרות הדבר וקניית ip ייחודי.
מכל הנאמר בכתוב, לא הבנתי כיצד אני יכול לגבור על הבעיה, שהודעת השגיעה היא 0x800ccc7d ו-ssl לא ניתמך ועלי להתקשר לשרת האדמינסטרטור.
תצרף בבקשה את טקסט השגיאה המלא בהודעה בפורום
https://secure.instantssl.com/products/SSLIdASignup1a
תעודת SSL חינם ל90 יום, למי שרוצה לעשות ניסויים בלי לשלם.
מעולה, תודה :)
אחרי חיפוש ארוך ומתיש ברחבי הרשת, עם הסברים צולעים סוף סוף הגעתי לאתר המעולה הזה.
בעזרת המדריך יש לי WAMP עם SSL ואפשר להמשיך בפיתוח. תודה רבה! ישר כוח
אם לא מפעילים את זה על אחסון פרטי איפה אפשר להפעיל את זה??
לא כבר עדיף לקנות סרטיפיקט ואז להעלות לאחסון?
סליחה אם יש לי טעויות בנושא אני פשוט לא כל כך מבין בו
כמה דברים לא מובנים לי.
הפקודה הזאת יוצרת מפתח פרטי לא ציבורי (במאמר כתוב ציבורי)
"openssl.exe genrsa -des3 -out server.key 1024"
וגם בשביל מה להוסיף -des3 שמצפין את המפתח אם בין כה וכה אתה מוחק את זה בסוף.
שלום רב,
לגבי הנתונים המופיעים הסרטיפיקטים:
1. נאמר שהדפדפן פונה לגורם לצד 3?ומוודא מולו שהוא באמת יצר את הסרטיפיקייט.
ישנם 2 מקומות בהם מופיע שם המנפיק של הסרטיפיקייט - פעם אחת בשם המנפיק ופעם שנייה כחתימה דיגיטלית על הhash, לא הבנתי את ההבדל בין המנפק לזה שיופיע בחתימה הדיגיטלית של הhash (שניהם זה היוצר ?!).
2.לא הבנתי את משמעותו של הhash, איך הוא מסייע לוודא מקוריות הסרטיפיקייט.
3.נאמר שהhash מאפשר לדפדפן לוודא שהנתונים לא שונו בדרך.
והחתימה הדיגיטלית של הhash מאפשרת לוודא מקוריות - מה ההבדל בין 2 הבדיקות?